package org.bcos.contract.source;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.Future;
import org.bcos.channel.client.TransactionSucCallback;
import org.bcos.web3j.abi.EventEncoder;
import org.bcos.web3j.abi.EventValues;
import org.bcos.web3j.abi.FunctionEncoder;
import org.bcos.web3j.abi.TypeReference;
import org.bcos.web3j.abi.datatypes.Address;
import org.bcos.web3j.abi.datatypes.Bool;
import org.bcos.web3j.abi.datatypes.DynamicArray;
import org.bcos.web3j.abi.datatypes.Event;
import org.bcos.web3j.abi.datatypes.Function;
import org.bcos.web3j.abi.datatypes.StaticArray;
import org.bcos.web3j.abi.datatypes.Type;
import org.bcos.web3j.abi.datatypes.Utf8String;
import org.bcos.web3j.abi.datatypes.generated.Bytes1;
import org.bcos.web3j.abi.datatypes.generated.Bytes32;
import org.bcos.web3j.abi.datatypes.generated.Uint256;
import org.bcos.web3j.crypto.Credentials;
import org.bcos.web3j.crypto.EncryptType;
import org.bcos.web3j.protocol.Web3j;
import org.bcos.web3j.protocol.core.DefaultBlockParameter;
import org.bcos.web3j.protocol.core.methods.request.EthFilter;
import org.bcos.web3j.protocol.core.methods.response.Log;
import org.bcos.web3j.protocol.core.methods.response.TransactionReceipt;
import org.bcos.web3j.tx.Contract;
import org.bcos.web3j.tx.TransactionManager;
import rx.Observable;
import rx.functions.Func1;

/**
 * Auto generated code.<br>
 * <strong>Do not modify!</strong><br>
 * Please use the <a href="https://docs.web3j.io/command_line.html">web3j command line tools</a>, or {@link org.bcos.web3j.codegen.SolidityFunctionWrapperGenerator} to update.
 *
 * <p>Generated with web3j version none.
 */
public final class ConsensusControlAction extends Contract {
    private static String BINARY = "606060405234156200000d57fe5b60405160208062002ea7833981016040528080519060200190919050505b6200004a816200007164010000000002620018cd176401000000009004565b6200006981620005d16401000000000262001cd5176401000000009004565b5b5062001035565b6000600060008373ffffffffffffffffffffffffffffffffffffffff16141515620004ea576200015062000136606060405190810160405280602c81526020017f5b436f6e73656e737573436f6e74726f6c5d2073797374656d50726f7879206c81526020017f6f6164207375636365737321000000000000000000000000000000000000000081525062000119620005d564010000000002620014b1176401000000009004565b6200060564010000000002620014c9179091906401000000009004565b620006486401000000000262001533176401000000009004565b8291508173ffffffffffffffffffffffffffffffffffffffff16631b5f03a66000604051606001526040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018281038252600a8152602001807f4e6f6465416374696f6e00000000000000000000000000000000000000000000815250602001915050606060405180830381600087803b1515620001f957fe5b6102c65a03f115156200020857fe5b505050604051805190602001805190602001805190505050905060008173ffffffffffffffffffffffffffffffffffffffff161415156200032257620002fd620002e3606060405190810160405280602b81526020017f5b436f6e73656e737573436f6e74726f6c5d204e6f6465416374696f6e206c6f81526020017f6164207375636365737321000000000000000000000000000000000000000000815250620002c6620005d564010000000002620014b1176401000000009004565b6200060564010000000002620014c9179091906401000000009004565b620006486401000000000262001533176401000000009004565b6200031c81620006746401000000000262001cd9176401000000009004565b62000403565b62000402620003e8608060405190810160405280604181526020017f5b436f6e73656e737573436f6e74726f6c5d204e6f6465416374696f6e206c6f81526020017f6164206661696c656421206d617920626520612077726f6e672061646472657381526020017f7300000000000000000000000000000000000000000000000000000000000000815250620003cb620007d56401000000000262001e1e176401000000009004565b6200060564010000000002620014c9179091906401000000009004565b620006486401000000000262001533176401000000009004565b5b620004e4620004ca600080549050620004ad606060405190810160405280603481526020017f5b436f6e73656e737573436f6e74726f6c5d20696e69742061676e656379206681526020017f696e6973682e2063757272656e742073697a653a00000000000000000000000081525062000490620005d564010000000002620014b1176401000000009004565b6200060564010000000002620014c9179091906401000000009004565b6200080564010000000002620014fa179091906401000000009004565b620006486401000000000262001533176401000000009004565b620005cb565b620005ca620005b0608060405190810160405280604281526020017f5b436f6e73656e737573436f6e74726f6c5d2073797374656d50726f7879206c81526020017f6f6164206661696c656421206d617920626520612077726f6e6720616464726581526020017f737300000000000000000000000000000000000000000000000000000000000081525062000593620007d56401000000000262001e1e176401000000009004565b6200060564010000000002620014c9179091906401000000009004565b620006486401000000000262001533176401000000009004565b5b5b505050565b5b50565b620005df62000f79565b620005ff6080620008666401000000000262001555176401000000009004565b90505b90565b6200060f62000f79565b62000636828460200151620008b564010000000002620015a0179091906401000000009004565b83602001819052508290505b92915050565b62000670816000015182602001516200094f6401000000000262001759176401000000009004565b5b50565b600060006000839250600091505b8273ffffffffffffffffffffffffffffffffffffffff166370b607606000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401809050602060405180830381600087803b1515620006ef57fe5b6102c65a03f11515620006fe57fe5b50505060405180519050821015620007ce578273ffffffffffffffffffffffffffffffffffffffff1663e0250c36836000604051602001526040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b15156200078557fe5b6102c65a03f115156200079457fe5b505050604051805190509050620007bf816200098e64010000000002620012fb176401000000009004565b5b818060010192505062000682565b5b50505050565b620007df62000f79565b620007ff6010620008666401000000000262001555176401000000009004565b90505b90565b6200080f62000f79565b62000854620008328362000bca640100000000026200160b176401000000009004565b8460200151620008b564010000000002620015a0179091906401000000009004565b83602001819052508290505b92915050565b6200087062000f79565b6200087a62000f79565b82816000019063ffffffff16908163ffffffff1681525050602060405190810160405280600081525081602001819052508091505b50919050565b620008bf62000fa2565b6000600060008451865101604051805910620008d85750595b908082528060200260200182016040525b509350602086019250602085019150602084019050620009208184885162000d256401000000000262001782176401000000009004565b620009458651820183875162000d256401000000000262001782176401000000009004565b5b50505092915050565b600060006200097162000d7464010000000002620017cf176401000000009004565b91506000600060006000600060006000898b8a2f90505b50505050565b600060016000836000191660001916815260200190815260200160002054141562000a0c5760016001600083600019166000191681526020019081526020016000208190555060008054806001018281620009ea919062000fb6565b916000526020600020900160005b839091909150906000191690555062000a37565b6001600160008360001916600019168152602001908152602001600020600082825401925050819055505b62000bc662000bac6001600084600019166000191681526020019081526020016000205462000b8f604060405190810160405280600781526020017f20636f756e743a0000000000000000000000000000000000000000000000000081525062000b7262000ab98762000d7e6401000000000262000dab176401000000009004565b62000b55606060405190810160405280602b81526020017f5b436f6e73656e737573436f6e74726f6c5d28696e20636f6e7472616374292081526020017f6164644e6f64655072693a00000000000000000000000000000000000000000081525062000b38620005d564010000000002620014b1176401000000009004565b6200060564010000000002620014c9179091906401000000009004565b6200060564010000000002620014c9179091906401000000009004565b6200060564010000000002620014c9179091906401000000009004565b6200080564010000000002620014fa179091906401000000009004565b620006486401000000000262001533176401000000009004565b5b50565b62000bd462000fa2565b600060006000600085141562000c2357604060405190810160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250935062000d1d565b600092508491505b600082111562000c5357600a8281151562000c4257fe5b049150828060010193505062000c2b565b8260ff1660405180591062000c655750595b908082528060200260200182016040525b5093506001830390505b600085111562000d1c576030600a8681151562000c9957fe5b06017f01000000000000000000000000000000000000000000000000000000000000000284828060019003935060ff1681518110151562000cd657fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8581151562000d1357fe5b04945062000c80565b5b505050919050565b60005b60208210151562000d5057825184526020840193506020830192505b60208203915062000d28565b6001826020036101000a039050801983511681855116818117865250505b50505050565b6000601090505b90565b62000d8862000fa2565b62000d9262000fe5565b60006000600062000da262000fe5565b602060405180591062000db25750595b908082528060200260200182016040525b50945060009350600092505b602083101562000e92578260080260020a876001900402600102915060007f010000000000000000000000000000000000000000000000000000000000000002827effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614151562000e835781858581518110151562000e4a57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535083806001019450505b5b828060010193505062000dcf565b8360405180591062000ea15750595b908082528060200260200182016040525b509050600092505b8383101562000f6b57848381518110151562000ed257fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002818481518110151562000f2c57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b828060010193505062000eba565b8095505b5050505050919050565b604060405190810160405280600063ffffffff16815260200162000f9c62000ff9565b81525090565b602060405190810160405280600081525090565b81548183558181151162000fe05781836000526020600020918201910162000fdf91906200100d565b5b505050565b602060405190810160405280600081525090565b602060405190810160405280600081525090565b6200103291905b808211156200102e57600081600090555060010162001014565b5090565b90565b611e6280620010456000396000f300606060405236156100c3576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063045ccf7b146100c55780630b0f1162146101905780633a96fdd7146101c857806346bdca9a146102795780635328bfad1461032e5780635f4c1fbc1461038557806361fc6d1f146103bd578063842df465146103f95780639201de5514610423578063c5ce0634146104ce578063cfb519281461050a578063e3dc94b714610580578063f037c906146105f5575bfe5b34156100cd57fe5b6101076004808061080001906040806020026040519081016040528092919082604060200280828437820191505050505091905050610631565b6040518080602001828103825283818151815260200191508051906020019080838360008314610156575b80518252602083111561015657602082019150602081019050602083039250610132565b505050905090810190601f1680156101825780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561019857fe5b6101b260048080356000191690602001909190505061082b565b6040518082815260200191505060405180910390f35b34156101d057fe5b610263600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610843565b6040518082815260200191505060405180910390f35b341561028157fe5b610314600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610b10565b604051808215151515815260200191505060405180910390f35b341561033657fe5b61036b600480803590602001908201803590602001919091929080359060200190820180359060200191909192905050610b28565b604051808215151515815260200191505060405180910390f35b341561038d57fe5b6103a7600480803560001916906020019091905050610b37565b6040518082815260200191505060405180910390f35b34156103c557fe5b6103df600480803560001916906020019091905050610b5d565b604051808215151515815260200191505060405180910390f35b341561040157fe5b610409610b8a565b604051808215151515815260200191505060405180910390f35b341561042b57fe5b610445600480803560001916906020019091905050610dab565b6040518080602001828103825283818151815260200191508051906020019080838360008314610494575b80518252602083111561049457602082019150602081019050602083039250610470565b505050905090810190601f1680156104c05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156104d657fe5b6104ec6004808035906020019091905050610f96565b60405180826000191660001916815260200191505060405180910390f35b341561051257fe5b610562600480803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610fbb565b60405180826000191660001916815260200191505060405180910390f35b341561058857fe5b610590610fec565b60405180806020018281038252838181518152602001915080519060200190602002808383600083146105e2575b8051825260208311156105e2576020820191506020810190506020830392506105be565b5050509050019250505060405180910390f35b34156105fd57fe5b61061760048080356000191690602001909190505061104f565b604051808215151515815260200191505060405180910390f35b6106396117d9565b6106416117ed565b6000600061064d6117ed565b604060405180591061065c5750595b908082528060200260200182016040525b50935060009250600091505b604082101561074a5760007f01000000000000000000000000000000000000000000000000000000000000000286836040811015156106b457fe5b60200201517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614151561073c5785826040811015156106f057fe5b6020020151848481518110151561070357fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535082806001019350505b5b8180600101925050610679565b826040518059106107585750595b908082528060200260200182016040525b509050600091505b8282101561081e57838281518110151561078757fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f01000000000000000000000000000000000000000000000000000000000000000281838151811015156107e057fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b8180600101925050610771565b8094505b50505050919050565b60016020528060005260406000206000915090505481565b600061084d6117ed565b6108556117ed565b6000600086935085925083519150818351101561087157825191505b600090505b81811015610ab657828181518110151561088c57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848281518110151561090757fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191610156109a2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9450610b06565b82818151811015156109b057fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168482815181101515610a2b57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161115610aa75760019450610b06565b5b5b8080600101915050610876565b825184511015610ae8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9450610b06565b825184511115610afb5760019450610b06565b60009450610b06565b5b5b5050505092915050565b60006000610b1e8484610843565b1490505b92915050565b6000600190505b949350505050565b60006001600083600019166000191681526020019081526020016000205490505b919050565b6000610b68826112ef565b1515610b775760009050610b85565b610b80826112fb565b600190505b919050565b60006000610c04606060405190810160405280602781526020017f5b436f6e73656e737573436f6e74726f6c5d202063757272656e74206167656e81526020017f63794c6973743a00000000000000000000000000000000000000000000000000815250610bf66114b1565b6114c990919063ffffffff16565b50600090505b600080549050811015610da257610d94610d8f60016000600085815481101515610c3057fe5b906000526020600020900160005b50546000191660001916815260200190815260200160002054610d81604060405190810160405280600181526020017f3a00000000000000000000000000000000000000000000000000000000000000815250610d73610cbb600088815481101515610ca657fe5b906000526020600020900160005b5054610dab565b610d65604060405190810160405280600181526020017f3a00000000000000000000000000000000000000000000000000000000000000815250610d578a610d49604060405190810160405280601381526020017f5b436f6e73656e737573436f6e74726f6c5d2000000000000000000000000000815250610d3b6114b1565b6114c990919063ffffffff16565b6114fa90919063ffffffff16565b6114c990919063ffffffff16565b6114c990919063ffffffff16565b6114c990919063ffffffff16565b6114fa90919063ffffffff16565b611533565b5b8080600101915050610c0a565b600191505b5090565b610db36117d9565b610dbb6117ed565b600060006000610dc96117ed565b6020604051805910610dd85750595b908082528060200260200182016040525b50945060009350600092505b6020831015610eb4578260080260020a876001900402600102915060007f010000000000000000000000000000000000000000000000000000000000000002827effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916141515610ea657818585815181101515610e6d57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535083806001019450505b5b8280600101935050610df5565b83604051805910610ec25750595b908082528060200260200182016040525b509050600092505b83831015610f88578483815181101515610ef157fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000028184815181101515610f4a57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b8280600101935050610edb565b8095505b5050505050919050565b600081815481101515610fa557fe5b906000526020600020900160005b915090505481565b6000610fc56117ed565b829050600081511415610fde5760006001029150610fe6565b602083015191505b50919050565b610ff4611801565b600080548060200260200160405190810160405280929190818152602001828054801561104457602002820191906000526020600020905b8154600019168152602001906001019080831161102c575b505050505090505b90565b60006000600061105e84611549565b151561106d57600092506112e8565b600160008560001916600019168152602001908152602001600020549150600082141561109d57600192506112e8565b81806001900392505060008211156110d45781600160008660001916600019168152602001908152602001600020819055506111fc565b60016000856000191660001916815260200190815260200160002060009055600090505b60008054905081101561114657836000191660008281548110151561111957fe5b906000526020600020900160005b505460001916141561113857611146565b5b80806001019150506110f8565b6000805490508110156111fb575b6001600080549050038110156111ba5760006001820181548110151561117657fe5b906000526020600020900160005b505460008281548110151561119557fe5b906000526020600020900160005b5081600019169055505b8080600101915050611154565b60006001600080549050038154811015156111d157fe5b906000526020600020900160005b506000905560008054809190600190036111f99190611815565b505b5b6112e36112de600160008760001916600019168152602001908152602001600020546112d0604060405190810160405280600781526020017f20636f756e743a000000000000000000000000000000000000000000000000008152506112c26112648a610dab565b6112b4604060405190810160405280601b81526020017f5b436f6e73656e737573436f6e74726f6c5d2064656c4e6f64653a00000000008152506112a66114b1565b6114c990919063ffffffff16565b6114c990919063ffffffff16565b6114c990919063ffffffff16565b6114fa90919063ffffffff16565b611533565b600192505b5050919050565b6000600190505b919050565b600060016000836000191660001916815260200190815260200160002054141561137557600160016000836000191660001916815260200190815260200160002081905550600080548060010182816113549190611841565b916000526020600020900160005b83909190915090600019169055506113a0565b6001600160008360001916600019168152602001908152602001600020600082825401925050819055505b6114ad6114a86001600084600019166000191681526020019081526020016000205461149a604060405190810160405280600781526020017f20636f756e743a0000000000000000000000000000000000000000000000000081525061148c61140887610dab565b61147e606060405190810160405280602b81526020017f5b436f6e73656e737573436f6e74726f6c5d28696e20636f6e7472616374292081526020017f6164644e6f64655072693a0000000000000000000000000000000000000000008152506114706114b1565b6114c990919063ffffffff16565b6114c990919063ffffffff16565b6114c990919063ffffffff16565b6114fa90919063ffffffff16565b611533565b5b50565b6114b961186d565b6114c36080611555565b90505b90565b6114d161186d565b6114e88284602001516115a090919063ffffffff16565b83602001819052508290505b92915050565b61150261186d565b61152161150e8361160b565b84602001516115a090919063ffffffff16565b83602001819052508290505b92915050565b61154581600001518260200151611759565b5b50565b6000600190505b919050565b61155d61186d565b61156561186d565b82816000019063ffffffff16908163ffffffff1681525050602060405190810160405280600081525081602001819052508091505b50919050565b6115a86117d9565b60006000600084518651016040518059106115c05750595b908082528060200260200182016040525b5093506020860192506020850191506020840190506115f281848851611782565b61160186518201838751611782565b5b50505092915050565b6116136117d9565b600060006000600085141561166057604060405190810160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509350611751565b600092508491505b600082111561168d57600a8281151561167d57fe5b0491508280600101935050611668565b8260ff1660405180591061169e5750595b908082528060200260200182016040525b5093506001830390505b6000851115611750576030600a868115156116d057fe5b06017f01000000000000000000000000000000000000000000000000000000000000000284828060019003935060ff1681518110151561170c57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8581151561174857fe5b0494506116b9565b5b505050919050565b600060006117656117cf565b91506000600060006000600060006000898b8a2f90505b50505050565b60005b6020821015156117ab57825184526020840193506020830192505b602082039150611785565b6001826020036101000a039050801983511681855116818117865250505b50505050565b6000601090505b90565b602060405190810160405280600081525090565b602060405190810160405280600081525090565b602060405190810160405280600081525090565b81548183558181151161183c5781836000526020600020918201910161183b9190611894565b5b505050565b815481835581811511611868578183600052602060002091820191016118679190611894565b5b505050565b604060405190810160405280600063ffffffff16815260200161188e6118b9565b81525090565b6118b691905b808211156118b257600081600090555060010161189a565b5090565b90565b602060405190810160405280600081525090565b6000600060008373ffffffffffffffffffffffffffffffffffffffff16141515611c2a5761196f61196a606060405190810160405280602c81526020017f5b436f6e73656e737573436f6e74726f6c5d2073797374656d50726f7879206c81526020017f6f6164207375636365737321000000000000000000000000000000000000000081525061195c6114b1565b6114c990919063ffffffff16565b611533565b8291508173ffffffffffffffffffffffffffffffffffffffff16631b5f03a66000604051606001526040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018281038252600a8152602001807f4e6f6465416374696f6e00000000000000000000000000000000000000000000815250602001915050606060405180830381600087803b1515611a1757fe5b6102c65a03f11515611a2557fe5b505050604051805190602001805190602001805190505050905060008173ffffffffffffffffffffffffffffffffffffffff16141515611aeb57611add611ad8606060405190810160405280602b81526020017f5b436f6e73656e737573436f6e74726f6c5d204e6f6465416374696f6e206c6f81526020017f6164207375636365737321000000000000000000000000000000000000000000815250611aca6114b1565b6114c990919063ffffffff16565b611533565b611ae681611cd9565b611b90565b611b8f611b8a608060405190810160405280604181526020017f5b436f6e73656e737573436f6e74726f6c5d204e6f6465416374696f6e206c6f81526020017f6164206661696c656421206d617920626520612077726f6e672061646472657381526020017f7300000000000000000000000000000000000000000000000000000000000000815250611b7c611e1e565b6114c990919063ffffffff16565b611533565b5b611c25611c20600080549050611c12606060405190810160405280603481526020017f5b436f6e73656e737573436f6e74726f6c5d20696e69742061676e656379206681526020017f696e6973682e2063757272656e742073697a653a000000000000000000000000815250611c046114b1565b6114c990919063ffffffff16565b6114fa90919063ffffffff16565b611533565b611ccf565b611cce611cc9608060405190810160405280604281526020017f5b436f6e73656e737573436f6e74726f6c5d2073797374656d50726f7879206c81526020017f6f6164206661696c656421206d617920626520612077726f6e6720616464726581526020017f7373000000000000000000000000000000000000000000000000000000000000815250611cbb611e1e565b6114c990919063ffffffff16565b611533565b5b5b505050565b5b50565b600060006000839250600091505b8273ffffffffffffffffffffffffffffffffffffffff166370b607606000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401809050602060405180830381600087803b1515611d5357fe5b6102c65a03f11515611d6157fe5b50505060405180519050821015611e17578273ffffffffffffffffffffffffffffffffffffffff1663e0250c36836000604051602001526040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b1515611de657fe5b6102c65a03f11515611df457fe5b505050604051805190509050611e09816112fb565b5b8180600101925050611ce7565b5b50505050565b611e2661186d565b611e306010611555565b90505b905600a165627a7a723058208f784588d6405b36c73241bdaa68661b03f161aa77842c3a9f06791c6992d2780029";

    public static final String ABI = "[{\"constant\":true,\"inputs\":[{\"name\":\"x\",\"type\":\"bytes1[64]\"}],\"name\":\"byte64ToString\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"agencyCountMap\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_a\",\"type\":\"string\"},{\"name\":\"_b\",\"type\":\"string\"}],\"name\":\"compare\",\"outputs\":[{\"name\":\"\",\"type\":\"int256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_a\",\"type\":\"string\"},{\"name\":\"_b\",\"type\":\"string\"}],\"name\":\"equal\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"agencyList\",\"type\":\"bytes32[]\"},{\"name\":\"num\",\"type\":\"uint256[]\"}],\"name\":\"control\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"agency\",\"type\":\"bytes32\"}],\"name\":\"lookupAgencyCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"agency\",\"type\":\"bytes32\"}],\"name\":\"addNode\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"printCurrentStateInLog\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"x\",\"type\":\"bytes32\"}],\"name\":\"bytes32ToString\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"agencyList\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"source\",\"type\":\"string\"}],\"name\":\"stringToBytes32\",\"outputs\":[{\"name\":\"result\",\"type\":\"bytes32\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"lookupAgencyList\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32[]\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"agency\",\"type\":\"bytes32\"}],\"name\":\"delNode\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"inputs\":[{\"name\":\"systemAddr\",\"type\":\"address\"}],\"payable\":false,\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"code\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"msg\",\"type\":\"string\"}],\"name\":\"LogMessage\",\"type\":\"event\"}]";

    private static String GUOMI_BINARY = "606060405234156200000d57fe5b60405160208062002ea7833981016040528080519060200190919050505b6200004a816200007164010000000002620018cd176401000000009004565b6200006981620005d16401000000000262001cd5176401000000009004565b5b5062001035565b6000600060008373ffffffffffffffffffffffffffffffffffffffff16141515620004ea576200015062000136606060405190810160405280602c81526020017f5b436f6e73656e737573436f6e74726f6c5d2073797374656d50726f7879206c81526020017f6f6164207375636365737321000000000000000000000000000000000000000081525062000119620005d564010000000002620012ef176401000000009004565b620006056401000000000262001307179091906401000000009004565b620006486401000000000262001371176401000000009004565b8291508173ffffffffffffffffffffffffffffffffffffffff16631a129c016000604051606001526040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018281038252600a8152602001807f4e6f6465416374696f6e00000000000000000000000000000000000000000000815250602001915050606060405180830381600087803b1515620001f957fe5b6102c65a03f115156200020857fe5b505050604051805190602001805190602001805190505050905060008173ffffffffffffffffffffffffffffffffffffffff161415156200032257620002fd620002e3606060405190810160405280602b81526020017f5b436f6e73656e737573436f6e74726f6c5d204e6f6465416374696f6e206c6f81526020017f6164207375636365737321000000000000000000000000000000000000000000815250620002c6620005d564010000000002620012ef176401000000009004565b620006056401000000000262001307179091906401000000009004565b620006486401000000000262001371176401000000009004565b6200031c81620006746401000000000262001cd9176401000000009004565b62000403565b62000402620003e8608060405190810160405280604181526020017f5b436f6e73656e737573436f6e74726f6c5d204e6f6465416374696f6e206c6f81526020017f6164206661696c656421206d617920626520612077726f6e672061646472657381526020017f7300000000000000000000000000000000000000000000000000000000000000815250620003cb620007d56401000000000262001e1e176401000000009004565b620006056401000000000262001307179091906401000000009004565b620006486401000000000262001371176401000000009004565b5b620004e4620004ca600080549050620004ad606060405190810160405280603481526020017f5b436f6e73656e737573436f6e74726f6c5d20696e69742061676e656379206681526020017f696e6973682e2063757272656e742073697a653a00000000000000000000000081525062000490620005d564010000000002620012ef176401000000009004565b620006056401000000000262001307179091906401000000009004565b620008056401000000000262001338179091906401000000009004565b620006486401000000000262001371176401000000009004565b620005cb565b620005ca620005b0608060405190810160405280604281526020017f5b436f6e73656e737573436f6e74726f6c5d2073797374656d50726f7879206c81526020017f6f6164206661696c656421206d617920626520612077726f6e6720616464726581526020017f737300000000000000000000000000000000000000000000000000000000000081525062000593620007d56401000000000262001e1e176401000000009004565b620006056401000000000262001307179091906401000000009004565b620006486401000000000262001371176401000000009004565b5b5b505050565b5b50565b620005df62000f79565b620005ff6080620008666401000000000262001555176401000000009004565b90505b90565b6200060f62000f79565b62000636828460200151620008b564010000000002620015a0179091906401000000009004565b83602001819052508290505b92915050565b62000670816000015182602001516200094f6401000000000262001759176401000000009004565b5b50565b600060006000839250600091505b8273ffffffffffffffffffffffffffffffffffffffff16638fbfa12d6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401809050602060405180830381600087803b1515620006ef57fe5b6102c65a03f11515620006fe57fe5b50505060405180519050821015620007ce578273ffffffffffffffffffffffffffffffffffffffff166377fa37c7836000604051602001526040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b15156200078557fe5b6102c65a03f115156200079457fe5b505050604051805190509050620007bf816200098e640100000000026200139f176401000000009004565b5b818060010192505062000682565b5b50505050565b620007df62000f79565b620007ff6010620008666401000000000262001555176401000000009004565b90505b90565b6200080f62000f79565b62000854620008328362000bca640100000000026200160b176401000000009004565b8460200151620008b564010000000002620015a0179091906401000000009004565b83602001819052508290505b92915050565b6200087062000f79565b6200087a62000f79565b82816000019063ffffffff16908163ffffffff1681525050602060405190810160405280600081525081602001819052508091505b50919050565b620008bf62000fa2565b6000600060008451865101604051805910620008d85750595b908082528060200260200182016040525b509350602086019250602085019150602084019050620009208184885162000d256401000000000262001782176401000000009004565b620009458651820183875162000d256401000000000262001782176401000000009004565b5b50505092915050565b600060006200097162000d7464010000000002620017cf176401000000009004565b91506000600060006000600060006000898b8a2f90505b50505050565b600060016000836000191660001916815260200190815260200160002054141562000a0c5760016001600083600019166000191681526020019081526020016000208190555060008054806001018281620009ea919062000fb6565b916000526020600020900160005b839091909150906000191690555062000a37565b6001600160008360001916600019168152602001908152602001600020600082825401925050819055505b62000bc662000bac6001600084600019166000191681526020019081526020016000205462000b8f604060405190810160405280600781526020017f20636f756e743a0000000000000000000000000000000000000000000000000081525062000b7262000ab98762000d7e6401000000000262000b44176401000000009004565b62000b55606060405190810160405280602b81526020017f5b436f6e73656e737573436f6e74726f6c5d28696e20636f6e7472616374292081526020017f6164644e6f64655072693a00000000000000000000000000000000000000000081525062000b38620005d564010000000002620012ef176401000000009004565b620006056401000000000262001307179091906401000000009004565b620006056401000000000262001307179091906401000000009004565b620006056401000000000262001307179091906401000000009004565b620008056401000000000262001338179091906401000000009004565b620006486401000000000262001371176401000000009004565b5b50565b62000bd462000fa2565b600060006000600085141562000c2357604060405190810160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250935062000d1d565b600092508491505b600082111562000c5357600a8281151562000c4257fe5b049150828060010193505062000c2b565b8260ff1660405180591062000c655750595b908082528060200260200182016040525b5093506001830390505b600085111562000d1c576030600a8681151562000c9957fe5b06017f01000000000000000000000000000000000000000000000000000000000000000284828060019003935060ff1681518110151562000cd657fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8581151562000d1357fe5b04945062000c80565b5b505050919050565b60005b60208210151562000d5057825184526020840193506020830192505b60208203915062000d28565b6001826020036101000a039050801983511681855116818117865250505b50505050565b6000601090505b90565b62000d8862000fa2565b62000d9262000fe5565b60006000600062000da262000fe5565b602060405180591062000db25750595b908082528060200260200182016040525b50945060009350600092505b602083101562000e92578260080260020a876001900402600102915060007f010000000000000000000000000000000000000000000000000000000000000002827effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614151562000e835781858581518110151562000e4a57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535083806001019450505b5b828060010193505062000dcf565b8360405180591062000ea15750595b908082528060200260200182016040525b509050600092505b8383101562000f6b57848381518110151562000ed257fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002818481518110151562000f2c57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b828060010193505062000eba565b8095505b5050505050919050565b604060405190810160405280600063ffffffff16815260200162000f9c62000ff9565b81525090565b602060405190810160405280600081525090565b81548183558181151162000fe05781836000526020600020918201910162000fdf91906200100d565b5b505050565b602060405190810160405280600081525090565b602060405190810160405280600081525090565b6200103291905b808211156200102e57600081600090555060010162001014565b5090565b90565b611e6280620010456000396000f300606060405236156100c3576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806315995807146100c55780631775469f146100ef5780632e77b5fc1461012b578063446a1fe1146101dc5780634ef4f3091461028757806353006dde146102fd5780636cfc90761461037257806388fb0579146103ae578063adc48fa1146103ea578063b372efc31461049f578063c6a7e8481461056a578063dbdfe920146105c1578063e0dac3a5146105f9575bfe5b34156100cd57fe5b6100d5610631565b604051808215151515815260200191505060405180910390f35b34156100f757fe5b61010d6004808035906020019091905050610852565b60405180826000191660001916815260200191505060405180910390f35b341561013357fe5b6101c6600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610877565b6040518082815260200191505060405180910390f35b34156101e457fe5b6101fe600480803560001916906020019091905050610b44565b604051808060200182810382528381815181526020019150805190602001908083836000831461024d575b80518252602083111561024d57602082019150602081019050602083039250610229565b505050905090810190601f1680156102795780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561028f57fe5b6102df600480803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610d2f565b60405180826000191660001916815260200191505060405180910390f35b341561030557fe5b61030d610d60565b604051808060200182810382528381815181526020019150805190602001906020028083836000831461035f575b80518252602083111561035f5760208201915060208101905060208303925061033b565b5050509050019250505060405180910390f35b341561037a57fe5b610394600480803560001916906020019091905050610dc3565b604051808215151515815260200191505060405180910390f35b34156103b657fe5b6103d0600480803560001916906020019091905050611063565b604051808215151515815260200191505060405180910390f35b34156103f257fe5b610485600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050611090565b604051808215151515815260200191505060405180910390f35b34156104a757fe5b6104e160048080610800019060408060200260405190810160405280929190826040602002808284378201915050505050919050506110a8565b6040518080602001828103825283818151815260200191508051906020019080838360008314610530575b8051825260208311156105305760208201915060208101905060208303925061050c565b505050905090810190601f16801561055c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561057257fe5b6105a76004808035906020019082018035906020019190919290803590602001908201803590602001919091929050506112a2565b604051808215151515815260200191505060405180910390f35b34156105c957fe5b6105e36004808035600019169060200190919050506112b1565b6040518082815260200191505060405180910390f35b341561060157fe5b61061b6004808035600019169060200190919050506112d7565b6040518082815260200191505060405180910390f35b600060006106ab606060405190810160405280602781526020017f5b436f6e73656e737573436f6e74726f6c5d202063757272656e74206167656e81526020017f63794c6973743a0000000000000000000000000000000000000000000000000081525061069d6112ef565b61130790919063ffffffff16565b50600090505b6000805490508110156108495761083b610836600160006000858154811015156106d757fe5b906000526020600020900160005b50546000191660001916815260200190815260200160002054610828604060405190810160405280600181526020017f3a0000000000000000000000000000000000000000000000000000000000000081525061081a61076260008881548110151561074d57fe5b906000526020600020900160005b5054610b44565b61080c604060405190810160405280600181526020017f3a000000000000000000000000000000000000000000000000000000000000008152506107fe8a6107f0604060405190810160405280601381526020017f5b436f6e73656e737573436f6e74726f6c5d20000000000000000000000000008152506107e26112ef565b61130790919063ffffffff16565b61133890919063ffffffff16565b61130790919063ffffffff16565b61130790919063ffffffff16565b61130790919063ffffffff16565b61133890919063ffffffff16565b611371565b5b80806001019150506106b1565b600191505b5090565b60008181548110151561086157fe5b906000526020600020900160005b915090505481565b60006108816117d9565b6108896117d9565b600060008693508592508351915081835110156108a557825191505b600090505b81811015610aea5782818151811015156108c057fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848281518110151561093b57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191610156109d6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9450610b3a565b82818151811015156109e457fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168482815181101515610a5f57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161115610adb5760019450610b3a565b5b5b80806001019150506108aa565b825184511015610b1c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9450610b3a565b825184511115610b2f5760019450610b3a565b60009450610b3a565b5b5b5050505092915050565b610b4c6117ed565b610b546117d9565b600060006000610b626117d9565b6020604051805910610b715750595b908082528060200260200182016040525b50945060009350600092505b6020831015610c4d578260080260020a876001900402600102915060007f010000000000000000000000000000000000000000000000000000000000000002827effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916141515610c3f57818585815181101515610c0657fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535083806001019450505b5b8280600101935050610b8e565b83604051805910610c5b5750595b908082528060200260200182016040525b509050600092505b83831015610d21578483815181101515610c8a57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000028184815181101515610ce357fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b8280600101935050610c74565b8095505b5050505050919050565b6000610d396117d9565b829050600081511415610d525760006001029150610d5a565b602083015191505b50919050565b610d68611801565b6000805480602002602001604051908101604052809291908181526020018280548015610db857602002820191906000526020600020905b81546000191681526020019060010190808311610da0575b505050505090505b90565b600060006000610dd284611387565b1515610de1576000925061105c565b6001600085600019166000191681526020019081526020016000205491506000821415610e11576001925061105c565b8180600190039250506000821115610e48578160016000866000191660001916815260200190815260200160002081905550610f70565b60016000856000191660001916815260200190815260200160002060009055600090505b600080549050811015610eba578360001916600082815481101515610e8d57fe5b906000526020600020900160005b5054600019161415610eac57610eba565b5b8080600101915050610e6c565b600080549050811015610f6f575b600160008054905003811015610f2e57600060018201815481101515610eea57fe5b906000526020600020900160005b5054600082815481101515610f0957fe5b906000526020600020900160005b5081600019169055505b8080600101915050610ec8565b6000600160008054905003815481101515610f4557fe5b906000526020600020900160005b50600090556000805480919060019003610f6d9190611815565b505b5b61105761105260016000876000191660001916815260200190815260200160002054611044604060405190810160405280600781526020017f20636f756e743a00000000000000000000000000000000000000000000000000815250611036610fd88a610b44565b611028604060405190810160405280601b81526020017f5b436f6e73656e737573436f6e74726f6c5d2064656c4e6f64653a000000000081525061101a6112ef565b61130790919063ffffffff16565b61130790919063ffffffff16565b61130790919063ffffffff16565b61133890919063ffffffff16565b611371565b600192505b5050919050565b600061106e82611393565b151561107d576000905061108b565b6110868261139f565b600190505b919050565b6000600061109e8484610877565b1490505b92915050565b6110b06117ed565b6110b86117d9565b600060006110c46117d9565b60406040518059106110d35750595b908082528060200260200182016040525b50935060009250600091505b60408210156111c15760007f010000000000000000000000000000000000000000000000000000000000000002868360408110151561112b57fe5b60200201517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161415156111b357858260408110151561116757fe5b6020020151848481518110151561117a57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535082806001019350505b5b81806001019250506110f0565b826040518059106111cf5750595b908082528060200260200182016040525b509050600091505b828210156112955783828151811015156111fe57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002818381518110151561125757fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b81806001019250506111e8565b8094505b50505050919050565b6000600190505b949350505050565b60006001600083600019166000191681526020019081526020016000205490505b919050565b60016020528060005260406000206000915090505481565b6112f7611841565b6113016080611555565b90505b90565b61130f611841565b6113268284602001516115a090919063ffffffff16565b83602001819052508290505b92915050565b611340611841565b61135f61134c8361160b565b84602001516115a090919063ffffffff16565b83602001819052508290505b92915050565b61138381600001518260200151611759565b5b50565b6000600190505b919050565b6000600190505b919050565b600060016000836000191660001916815260200190815260200160002054141561141957600160016000836000191660001916815260200190815260200160002081905550600080548060010182816113f89190611868565b916000526020600020900160005b8390919091509060001916905550611444565b6001600160008360001916600019168152602001908152602001600020600082825401925050819055505b61155161154c6001600084600019166000191681526020019081526020016000205461153e604060405190810160405280600781526020017f20636f756e743a000000000000000000000000000000000000000000000000008152506115306114ac87610b44565b611522606060405190810160405280602b81526020017f5b436f6e73656e737573436f6e74726f6c5d28696e20636f6e7472616374292081526020017f6164644e6f64655072693a0000000000000000000000000000000000000000008152506115146112ef565b61130790919063ffffffff16565b61130790919063ffffffff16565b61130790919063ffffffff16565b61133890919063ffffffff16565b611371565b5b50565b61155d611841565b611565611841565b82816000019063ffffffff16908163ffffffff1681525050602060405190810160405280600081525081602001819052508091505b50919050565b6115a86117ed565b60006000600084518651016040518059106115c05750595b908082528060200260200182016040525b5093506020860192506020850191506020840190506115f281848851611782565b61160186518201838751611782565b5b50505092915050565b6116136117ed565b600060006000600085141561166057604060405190810160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509350611751565b600092508491505b600082111561168d57600a8281151561167d57fe5b0491508280600101935050611668565b8260ff1660405180591061169e5750595b908082528060200260200182016040525b5093506001830390505b6000851115611750576030600a868115156116d057fe5b06017f01000000000000000000000000000000000000000000000000000000000000000284828060019003935060ff1681518110151561170c57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8581151561174857fe5b0494506116b9565b5b505050919050565b600060006117656117cf565b91506000600060006000600060006000898b8a2f90505b50505050565b60005b6020821015156117ab57825184526020840193506020830192505b602082039150611785565b6001826020036101000a039050801983511681855116818117865250505b50505050565b6000601090505b90565b602060405190810160405280600081525090565b602060405190810160405280600081525090565b602060405190810160405280600081525090565b81548183558181151161183c5781836000526020600020918201910161183b9190611894565b5b505050565b604060405190810160405280600063ffffffff1681526020016118626118b9565b81525090565b81548183558181151161188f5781836000526020600020918201910161188e9190611894565b5b505050565b6118b691905b808211156118b257600081600090555060010161189a565b5090565b90565b602060405190810160405280600081525090565b6000600060008373ffffffffffffffffffffffffffffffffffffffff16141515611c2a5761196f61196a606060405190810160405280602c81526020017f5b436f6e73656e737573436f6e74726f6c5d2073797374656d50726f7879206c81526020017f6f6164207375636365737321000000000000000000000000000000000000000081525061195c6112ef565b61130790919063ffffffff16565b611371565b8291508173ffffffffffffffffffffffffffffffffffffffff16631a129c016000604051606001526040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018281038252600a8152602001807f4e6f6465416374696f6e00000000000000000000000000000000000000000000815250602001915050606060405180830381600087803b1515611a1757fe5b6102c65a03f11515611a2557fe5b505050604051805190602001805190602001805190505050905060008173ffffffffffffffffffffffffffffffffffffffff16141515611aeb57611add611ad8606060405190810160405280602b81526020017f5b436f6e73656e737573436f6e74726f6c5d204e6f6465416374696f6e206c6f81526020017f6164207375636365737321000000000000000000000000000000000000000000815250611aca6112ef565b61130790919063ffffffff16565b611371565b611ae681611cd9565b611b90565b611b8f611b8a608060405190810160405280604181526020017f5b436f6e73656e737573436f6e74726f6c5d204e6f6465416374696f6e206c6f81526020017f6164206661696c656421206d617920626520612077726f6e672061646472657381526020017f7300000000000000000000000000000000000000000000000000000000000000815250611b7c611e1e565b61130790919063ffffffff16565b611371565b5b611c25611c20600080549050611c12606060405190810160405280603481526020017f5b436f6e73656e737573436f6e74726f6c5d20696e69742061676e656379206681526020017f696e6973682e2063757272656e742073697a653a000000000000000000000000815250611c046112ef565b61130790919063ffffffff16565b61133890919063ffffffff16565b611371565b611ccf565b611cce611cc9608060405190810160405280604281526020017f5b436f6e73656e737573436f6e74726f6c5d2073797374656d50726f7879206c81526020017f6f6164206661696c656421206d617920626520612077726f6e6720616464726581526020017f7373000000000000000000000000000000000000000000000000000000000000815250611cbb611e1e565b61130790919063ffffffff16565b611371565b5b5b505050565b5b50565b600060006000839250600091505b8273ffffffffffffffffffffffffffffffffffffffff16638fbfa12d6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401809050602060405180830381600087803b1515611d5357fe5b6102c65a03f11515611d6157fe5b50505060405180519050821015611e17578273ffffffffffffffffffffffffffffffffffffffff166377fa37c7836000604051602001526040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b1515611de657fe5b6102c65a03f11515611df457fe5b505050604051805190509050611e098161139f565b5b8180600101925050611ce7565b5b50505050565b611e26611841565b611e306010611555565b90505b905600a165627a7a72305820b5ac03ab587441698105f301c4b987ca41db53f17530437a48791d88ccbfb2080029";

    private ConsensusControlAction(String contractAddress, Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit, Boolean isInitByName) {
        super(BINARY, contractAddress, web3j, credentials, gasPrice, gasLimit, isInitByName);
        if(EncryptType.encryptType == 1) super.setContractBinary(GUOMI_BINARY);
    }

    private ConsensusControlAction(String contractAddress, Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit, Boolean isInitByName) {
        super(BINARY, contractAddress, web3j, transactionManager, gasPrice, gasLimit, isInitByName);
        if(EncryptType.encryptType == 1) super.setContractBinary(GUOMI_BINARY);
    }

    private ConsensusControlAction(String contractAddress, Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit) {
        super(BINARY, contractAddress, web3j, credentials, gasPrice, gasLimit, false);
        if(EncryptType.encryptType == 1) super.setContractBinary(GUOMI_BINARY);
    }

    private ConsensusControlAction(String contractAddress, Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit) {
        super(BINARY, contractAddress, web3j, transactionManager, gasPrice, gasLimit, false);
        if(EncryptType.encryptType == 1) super.setContractBinary(GUOMI_BINARY);
    }

    public static List<LogMessageEventResponse> getLogMessageEvents(TransactionReceipt transactionReceipt) {
        final Event event = new Event("LogMessage", 
                Arrays.<TypeReference<?>>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Uint256>() {}, new TypeReference<Utf8String>() {}));
        List<EventValues> valueList = extractEventParameters(event, transactionReceipt);
        ArrayList<LogMessageEventResponse> responses = new ArrayList<LogMessageEventResponse>(valueList.size());
        for (EventValues eventValues : valueList) {
            LogMessageEventResponse typedResponse = new LogMessageEventResponse();
            typedResponse.addr = (Address) eventValues.getNonIndexedValues().get(0);
            typedResponse.code = (Uint256) eventValues.getNonIndexedValues().get(1);
            typedResponse.msg = (Utf8String) eventValues.getNonIndexedValues().get(2);
            responses.add(typedResponse);
        }
        return responses;
    }

    public Observable<LogMessageEventResponse> logMessageEventObservable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        final Event event = new Event("LogMessage", 
                Arrays.<TypeReference<?>>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Uint256>() {}, new TypeReference<Utf8String>() {}));
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(event));
        return web3j.ethLogObservable(filter).map(new Func1<Log, LogMessageEventResponse>() {
            @Override
            public LogMessageEventResponse call(Log log) {
                EventValues eventValues = extractEventParameters(event, log);
                LogMessageEventResponse typedResponse = new LogMessageEventResponse();
                typedResponse.addr = (Address) eventValues.getNonIndexedValues().get(0);
                typedResponse.code = (Uint256) eventValues.getNonIndexedValues().get(1);
                typedResponse.msg = (Utf8String) eventValues.getNonIndexedValues().get(2);
                return typedResponse;
            }
        });
    }

    public Future<Utf8String> byte64ToString(StaticArray<Bytes1> x) {
        Function function = new Function("byte64ToString", 
                Arrays.<Type>asList(x), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}));
        return executeCallSingleValueReturnAsync(function);
    }

    public Future<Uint256> agencyCountMap(Bytes32 param0) {
        Function function = new Function("agencyCountMap", 
                Arrays.<Type>asList(param0), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeCallSingleValueReturnAsync(function);
    }

    public Future<TransactionReceipt> compare(Utf8String _a, Utf8String _b) {
        Function function = new Function("compare", Arrays.<Type>asList(_a, _b), Collections.<TypeReference<?>>emptyList());
        return executeTransactionAsync(function);
    }

    public void compare(Utf8String _a, Utf8String _b, TransactionSucCallback callback) {
        Function function = new Function("compare", Arrays.<Type>asList(_a, _b), Collections.<TypeReference<?>>emptyList());
        executeTransactionAsync(function, callback);
    }

    public Future<TransactionReceipt> equal(Utf8String _a, Utf8String _b) {
        Function function = new Function("equal", Arrays.<Type>asList(_a, _b), Collections.<TypeReference<?>>emptyList());
        return executeTransactionAsync(function);
    }

    public void equal(Utf8String _a, Utf8String _b, TransactionSucCallback callback) {
        Function function = new Function("equal", Arrays.<Type>asList(_a, _b), Collections.<TypeReference<?>>emptyList());
        executeTransactionAsync(function, callback);
    }

    public Future<Bool> control(DynamicArray<Bytes32> agencyList, DynamicArray<Uint256> num) {
        Function function = new Function("control", 
                Arrays.<Type>asList(agencyList, num), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        return executeCallSingleValueReturnAsync(function);
    }

    public Future<Uint256> lookupAgencyCount(Bytes32 agency) {
        Function function = new Function("lookupAgencyCount", 
                Arrays.<Type>asList(agency), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeCallSingleValueReturnAsync(function);
    }

    public Future<TransactionReceipt> addNode(Bytes32 agency) {
        Function function = new Function("addNode", Arrays.<Type>asList(agency), Collections.<TypeReference<?>>emptyList());
        return executeTransactionAsync(function);
    }

    public void addNode(Bytes32 agency, TransactionSucCallback callback) {
        Function function = new Function("addNode", Arrays.<Type>asList(agency), Collections.<TypeReference<?>>emptyList());
        executeTransactionAsync(function, callback);
    }

    public Future<Bool> printCurrentStateInLog() {
        Function function = new Function("printCurrentStateInLog", 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        return executeCallSingleValueReturnAsync(function);
    }

    public Future<Utf8String> bytes32ToString(Bytes32 x) {
        Function function = new Function("bytes32ToString", 
                Arrays.<Type>asList(x), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}));
        return executeCallSingleValueReturnAsync(function);
    }

    public Future<Bytes32> agencyList(Uint256 param0) {
        Function function = new Function("agencyList", 
                Arrays.<Type>asList(param0), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Bytes32>() {}));
        return executeCallSingleValueReturnAsync(function);
    }

    public Future<TransactionReceipt> stringToBytes32(Utf8String source) {
        Function function = new Function("stringToBytes32", Arrays.<Type>asList(source), Collections.<TypeReference<?>>emptyList());
        return executeTransactionAsync(function);
    }

    public void stringToBytes32(Utf8String source, TransactionSucCallback callback) {
        Function function = new Function("stringToBytes32", Arrays.<Type>asList(source), Collections.<TypeReference<?>>emptyList());
        executeTransactionAsync(function, callback);
    }

    public Future<DynamicArray<Bytes32>> lookupAgencyList() {
        Function function = new Function("lookupAgencyList", 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Bytes32>>() {}));
        return executeCallSingleValueReturnAsync(function);
    }

    public Future<TransactionReceipt> delNode(Bytes32 agency) {
        Function function = new Function("delNode", Arrays.<Type>asList(agency), Collections.<TypeReference<?>>emptyList());
        return executeTransactionAsync(function);
    }

    public void delNode(Bytes32 agency, TransactionSucCallback callback) {
        Function function = new Function("delNode", Arrays.<Type>asList(agency), Collections.<TypeReference<?>>emptyList());
        executeTransactionAsync(function, callback);
    }

    public static Future<ConsensusControlAction> deploy(Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit, BigInteger initialWeiValue, Address systemAddr) {
        String encodedConstructor = FunctionEncoder.encodeConstructor(Arrays.<Type>asList(systemAddr));
        if(EncryptType.encryptType == 1) setBinary(getGuomiBinary());
        return deployAsync(ConsensusControlAction.class, web3j, credentials, gasPrice, gasLimit, BINARY, encodedConstructor, initialWeiValue);
    }

    public static Future<ConsensusControlAction> deploy(Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit, BigInteger initialWeiValue, Address systemAddr) {
        String encodedConstructor = FunctionEncoder.encodeConstructor(Arrays.<Type>asList(systemAddr));
        if(EncryptType.encryptType == 1) setBinary(getGuomiBinary());
        return deployAsync(ConsensusControlAction.class, web3j, transactionManager, gasPrice, gasLimit, BINARY, encodedConstructor, initialWeiValue);
    }

    public static ConsensusControlAction load(String contractAddress, Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit) {
        return new ConsensusControlAction(contractAddress, web3j, credentials, gasPrice, gasLimit, false);
    }

    public static ConsensusControlAction load(String contractAddress, Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit) {
        return new ConsensusControlAction(contractAddress, web3j, transactionManager, gasPrice, gasLimit, false);
    }

    public static ConsensusControlAction loadByName(String contractName, Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit) {
        return new ConsensusControlAction(contractName, web3j, credentials, gasPrice, gasLimit, true);
    }

    public static ConsensusControlAction loadByName(String contractName, Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit) {
        return new ConsensusControlAction(contractName, web3j, transactionManager, gasPrice, gasLimit, true);
    }

    public static void setBinary(String binary) {
        BINARY = binary;
    }

    public static String getGuomiBinary() {
        return GUOMI_BINARY;
    }

    public static class LogMessageEventResponse {
        public Address addr;

        public Uint256 code;

        public Utf8String msg;
    }
}
